#pragma once

#include "ServerHeader.h"

#include <adwaita.h>
#include <time.h>

G_BEGIN_DECLS

typedef enum
{
	/* entry-remove 信号，当事件删除成功时发出 */
	EVENT_ENTRY_SIGNAL_REMOVE = 0,
	/* entry-modify 信号，当事件修改成功且时间与之前不同时发出 */
	EVENT_ENTRY_SIGNAL_MODIFY = 1,
	EVENT_ENTRY_SIGNAL_END,
} EventEntrySignal;

#define EVENT_TYPE_ENTRY (event_entry_get_type())
G_DECLARE_FINAL_TYPE(EventEntry, event_entry, EVENT, ENTRY, AdwBin);

extern GtkWidget *event_entry_new(void);

/* 设置事件名称 */
extern void event_entry_set_event_name(EventEntry *self,
				       const char *event_name);

/* 设置事件描述 */
extern void event_entry_set_event_describe(EventEntry *self,
					   const char *event_describe);

/* 设置事件组名称 */
extern void event_entry_set_group_name(EventEntry *self,
				       const char *group_name);

/* 设置事件组 GroupID */
extern void event_entry_set_group_id(EventEntry *self, euint32 group_id);

/* 设置事件组 EventID */
extern void event_entry_set_event_id(EventEntry *self, euint32 event_id);

/* 设置事件截止时间 */
extern void event_entry_set_end_time(EventEntry *self, time_t end_time);

/* 设置该事件本用户是否可修改 */
extern void event_entry_set_can_modify(EventEntry *self, bool can_modify);

/* 设置本事件条目是否为重要事件 */
extern void event_entry_set_is_important(EventEntry *self, bool is_important);
//
extern const char *event_entry_get_event_name(EventEntry *self);
extern const char *event_entry_get_event_describe(EventEntry *self);
extern const char *event_entry_get_group_name(EventEntry *self);
extern euint32	   event_entry_get_group_id(EventEntry *self);
extern euint32	   event_entry_get_event_id(EventEntry *self);
extern time_t	   event_entry_get_end_time(EventEntry *self);
extern bool	   event_entry_get_is_important(EventEntry *self);

/* 比较两个条目的截止时间 */
extern bool event_entry_compare_time(const EventEntry *entry1,
				     const EventEntry *entry2);

/* 接收 EventAddDialog 的事件设置结果，并发出修正信号 */
extern void event_entry_emit_signal(EventEntry	    *self,
				    EventEntrySignal e_signal);

G_END_DECLS
